package com.upcode.weighing.util.excel;


import com.upcode.weighing.common.constant.CommonConstant;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;


public class Base64Util {
    private static final Logger logger = LoggerFactory.getLogger(Base64Util.class);

    //图片转化成base64字符串
    public static String GetImageStr(String imgFile) {
        //将图片文件转化为字节数组字符串，并对其进行Base64编码处理
        byte[] data = null;
        //读取图片字节数组
        try (InputStream in = new FileInputStream(imgFile);) {
            data = new byte[in.available()];
            in.read(data);
        } catch (IOException e) {
            logger.info("Base64Util GetImageStr e:" + e.getLocalizedMessage());
        }
        //返回Base64编码过的字节数组字符串
        return Base64.encodeBase64String(data);
    }

    //base64字符串转化成图片
    public static String GenerateImage(String imgStr, String fileName) {
        //对字节数组字符串进行Base64解码并生成图片
        String imgUrl = "";
        //图像数据为空
        if (StringUtils.isBlank(imgStr))
            return imgUrl;
        //Base64解码
        byte[] b = Base64.decodeBase64(imgStr);
        for (int i = 0; i < b.length; ++i) {
            //调整异常数据
            if (b[i] < 0) {
                b[i] += 256;
            }
        }
        //文件目录不存在则创建
        File outFile = new File(String.valueOf(CommonConstant.FILEPATH));
        if (!outFile.exists()) {
            outFile.mkdirs();
        }
        //文件最终的存储位置
        File dest = new File(CommonConstant.FILEPATH + fileName);
        //判断目标文件所在的目录是否存在
        if (!dest.getParentFile().exists()) {
            //创建目录
            if (!dest.getParentFile().mkdirs()) {
                return imgUrl;
            }
        }
        //新生成的图片
        imgUrl = CommonConstant.FILEPATH + fileName;
        //这种写法不需要flush或者close 会自动关闭 FileOutputStream 实现了java中的java.lang.AutoCloseable接口。
        try (OutputStream out = new FileOutputStream(CommonConstant.FILEPATH + fileName);) {
            out.write(b);
        } catch (Exception e) {
            logger.info("Base64Util GenerateImage e:" + e.getLocalizedMessage());
        } finally {
            return imgUrl;
        }
    }
}
